home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-08-18 | 7.9 KB | 360 lines |
- ' A text editor
- ' ~~~~~~~~~~~~~
- ' by Ben Wyatt, bwyatt@paston.co.uk
-
- ' A text editor with very nasty colours and many options which just don't
- ' work, and is limited to 200 lines (you can change this, look below)
- ' Since I did this, I've done a proportional font text editor which is
- ' much better, but it's not finished (yet)
-
- Set Buffer 15
-
- LINES=200 : L=0 : YPOS=0
- Dim LINE$(LINES)
- Global LINES,TSCRHEIGHT,L,YPOS,FILENAME$
- Global LINE$()
-
- _TEXTEDITOR[0]
- Edit
-
- Procedure _TEXTEDITOR[SCR]
-
- ' Scr=Spare screen to be used
-
- Screen Open SCR,640,256,8,Hires
- Screen Display 0,128,37,640,Screen Height
- Palette $0,$40F,$A0F,,$FFF
- Cdown
- Cls 1
- Cls 2,0,0 To 640,8
- Cls 2,624,8 To 640,Screen Height
- TSCRHEIGHT=Screen Height/8-1
- Scroll Off
- _LMOUSE
-
- Def Scroll 1,0,8 To 624,Screen Height,0,8
- Def Scroll 2,0,16 To 624,Screen Height,0,-8
-
- Paper 1 : Pen 4
-
- Menu$(1)=" Project "
- Menu$(1,1)=" Load "
- Menu$(1,2)=" Save "
- Menu$(1,3)=" Save As "
- Menu$(1,4)=" " : Menu Inactive(1,4)
- Menu$(1,5)=" Print "
- Menu$(1,7)=" " : Menu Inactive(1,7)
- Menu$(1,20)=" Quit "
-
- Menu$(2)=" Block "
- Menu$(2,1)=" Select All "
- Menu$(2,3)=" " : Menu Inactive(2,3)
- Menu$(2,4)=" Copy "
- Menu$(2,5)=" Cut "
- Menu$(2,6)=" Delete "
-
- Menu$(3)=" Search "
- Menu$(3,1)=" Search New "
- Menu$(3,2)=" Search Next "
- Menu$(3,3)=" Search Previous "
- Menu$(3,5)=" " : Menu Inactive(3,5)
- Menu$(3,6)=" Replace New "
- Menu$(3,7)=" Replace Next "
- Menu$(3,8)=" Replace Previous "
-
- Menu On
-
- _TEXTUPDATE[0]
- _CURSPOS
-
- Repeat
-
- If Choice
-
- C1=Choice(1)
- C2=Choice(2)
- Menu Off
-
- If C1=1
- If C2=1
- _LOAD[Fsel$("","","Select a Text file to Load","")]
- _TEXTUPDATE[YPOS]
- End If
- If C2=2
- _SAVE[FILENAME$]
- _TEXTUPDATE[YPOS]
- End If
- If C2=3
- FILENAME$="" : _SAVE[FILENAME$]
- _TEXTUPDATE[YPOS]
- End If
- End If
-
- If C1=2
- End If
-
- If C1=3
- End If
-
- Menu On
- Clear Key
-
- End If
-
- X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : MC=Mouse Click : MK=Mouse Key
- If MC=1 and Y>7
- XC=X/8 : YC=Y/8
- L=YPOS+YC-1
- Locate Min(XC,Len(LINE$(L))),YC
- End If
-
- I$=Inkey$ : S=Scancode : A=Asc(I$) : SS=Scanshift
- If A>0 or S>0 : _CHECK[I$,A,S,SS] : End If
-
- Until C1=1 and C2=20
-
- End Proc
- Procedure _TEXTUPDATE[ST]
-
- ' St=Start of text to print
-
- Cls 1,0,8 To 624,Screen Height
-
- X=X Curs : Y=Y Curs
- Paper 1 : Pen 4
-
- For YPL=ST To ST+TSCRHEIGHT-1
- Locate 0,YPL-ST+1
- Print LINE$(YPL)
- Next YPL
-
- Locate X,Y
-
- End Proc
-
- Procedure _LOAD[FILE$]
-
- If Exist(FILE$)=0 and FILE$<>""
- _ERROR["File Doesn't Exist",7] : FILE$=""
- End If
- If FILE$<>""
- Reserve As Chip Data 12, Extension_18_0294(FILE$)
- _PRINTFILE[FILE$] : Bload FILE$,12
- PL=Start(12)
- For N=0 To LINES
- LINE$(N)=""
- If PL<Start(12)+Length(12)
- LINE$(N)= Extension_18_013A(PL,78,Chr$(10))
- Add PL,Len(LINE$(N))+1
- End If
- Next N
-
- Erase 12
- L=0 : YPOS=0
-
- End If
-
- End Proc
- Procedure _SAVE[FILENAME$]
-
- X=X Curs : Y=Y Curs
-
- If FILENAME$=""
- FILENAME$=Fsel$("","","Input Filename to Save Under","")
- End If
-
- Reserve As Chip Data 12,78*LINES
- PL=Start(12)
- For N=0 To LINES
- Extension_18_015A PL,LINE$(N)+Chr$(10)
- Add PL,Len(LINE$(N))+1
- Next N
- Bsave FILENAME$,Start(12) To PL
- Erase 12
-
- _PRINTFILE[FILENAME$]
- Locate X,Y
-
- End Proc
-
- Procedure _ERROR[MESS$,SCR]
-
- S=Screen
-
- Screen Open SCR,640,8,2,Hires
- Flash Off : Curs Off : Cls 0
- Centre MESS$
-
- Repeat : Until Mouse Key>0
-
- Screen Close SCR
- Screen S
-
- End Proc
- Procedure _LMOUSE
- Limit Mouse 130,39 To 128+318,37+Screen Height-2
- End Proc
- Procedure _CHECK[I$,A,S,SS]
-
- X=X Curs
-
- ' Normal Key
- If A>31 and Len(LINE$(L))<77
- A1$=Left$(LINE$(L),X)
- A2$=Right$(LINE$(L),Len(LINE$(L))-X)
- LINE$(L)=A1$+I$+A2$
- Inc X
- Locate 0,Y Curs
- Print LINE$(L);
- Locate X,Y Curs
- End If
-
- ' Delete
- If A=8 and(L>0 or X>0)
- If X=0
- A1$=LINE$(L-1)
- A2$=LINE$(L)
- If Len(A1$+A2$)<=77
- For N=L+1 To LINES
- LINE$(N-1)=LINE$(N)
- Next N
- LINE$(LINES)=""
- LINE$(L-1)=A1$+A2$
- Dec L
- If Y Curs=1
- Curs Off : Wait Vbl
- Scroll 1 : Dec YPOS
- Cls 1,0,8 To 624,16
- Locate 0,1 : Print LINE$(L);
- Curs On
- Else Cup
- End If
- Y=Y Curs
- Def Scroll 3,0,Y*8+8 To 624,Screen Height,0,-8
- Scroll 3
- Locate 0,Y : Print LINE$(L);
- Cls 1,0,248 To 624,256
- Locate 0,TSCRHEIGHT : Print LINE$(YPOS+TSCRHEIGHT-1);
- Locate Len(A1$),Y
- Clear Key
- End If
- Else
- A1$=Left$(LINE$(L),X-1)
- A2$=Right$(LINE$(L),Len(LINE$(L))-X)
- LINE$(L)=A1$+A2$
- Dec X
- Locate 0,Y Curs
- Print LINE$(L)+" ";
- Locate X,Y Curs
- End If
- End If
-
- ' Backspace
- If S=70 and X<Len(LINE$(L))
- A1$=Left$(LINE$(L),X)
- A2$=Right$(LINE$(L),Len(LINE$(L))-X-1)
- LINE$(L)=A1$+A2$
- Locate 0,Y Curs
- Print LINE$(L)+" ";
- Locate X,Y Curs
- End If
-
- ' Return
- If A=13 and LINE$(LINES)=""
- A1$=Left$(LINE$(L),X)
- A2$=Right$(LINE$(L),Len(LINE$(L))-X)
- LINE$(L)=A1$
- For N=LINES-1 To L+1 Step -1
- LINE$(N+1)=LINE$(N)
- Next N
- If Y Curs=TSCRHEIGHT
- Curs Off : Wait Vbl
- Scroll 2 : Inc YPOS
- Cls 1,0,Screen Height-8 To 624,Screen Height
- Locate 0,TSCRHEIGHT : Print LINE$(L);
- Cup : Curs On
- End If
- Inc L
- MV=0
- If Y Curs<TSCRHEIGHT : Locate 0,Y Curs+1
- Else Inc YPOS
- End If
- LINE$(L)=A2$
- Y=Y Curs
- Def Scroll 3,0,Y*8 To 624,Screen Height,0,8
- Curs Off : Wait Vbl
- Scroll 3
- Cls 1,0,Y*8-8 To 624,Y*8+8
- Locate 0,Y-1 : Print LINE$(L-1);
- Locate 0,Y : Print LINE$(L);
- If Y<>TSCRHEIGHT : Locate 0,Y+1 : Print LINE$(L+1); : End If
- Locate 0,Y
- Curs On
- Clear Key
- End If
-
- ' Cursor left
- If A=29 and X>0
- If SS>0 : Locate 0,Y Curs
- Else Cleft
- End If
- End If
-
- ' Cursor right
- If A=28 and X<Len(LINE$(L))
- If SS>0 : Locate Len(LINE$(L)),Y Curs
- Else Cright
- End If
- End If
-
- ' Cursor up
- If A=30 and L>0
- Dec L
- If Y Curs=1
- Curs Off : Wait Vbl
- Scroll 1 : Dec YPOS
- Cls 1,0,8 To 624,16
- Locate 0,1 : Print LINE$(L);
- Curs On
- Else Cup
- End If
- If X>Len(LINE$(L)) : X=Len(LINE$(L)) : End If
- Locate X,Y Curs
- Clear Key
- End If
-
- ' Cursor down
- If A=31 and L<LINES
- Inc L
- If Y Curs=TSCRHEIGHT
- Curs Off : Wait Vbl
- Scroll 2 : Inc YPOS
- Cls 1,0,Screen Height-8 To 624,Screen Height
- Locate 0,TSCRHEIGHT : Print LINE$(L);
- Curs On
- Else Cdown
- End If
- If X>Len(LINE$(L)) : X=Len(LINE$(L)) : End If
- Locate X,Y Curs
- Clear Key
- End If
-
- _CURSPOS
-
- End Proc
- Procedure _CURSPOS
- X=X Curs : Y=Y Curs
- Locate 70,0 : Paper 2
- Print Using "X ## ";X;
- Print Using "Y ##";Y
- Locate X,Y : Paper 1
- End Proc
- Procedure _PRINTFILE[FILE$]
-
- Def Fn SHORTEN$(F$)=Right$(Right$(F$,Len(F$)- Extension_18_0086(F$,"/")),Len(Right$(F$,Len(F$)- Extension_18_0086(F$,":"))))
- Home : Paper 2 : Pen 4
- If FILE$<>"" : Print Fn SHORTEN$(FILE$)
- Else Print "New File"
- End If
-
- End Proc